]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
endSessionDialog: Only show logout inhibiting apps
authorMichael Terry <mike@mterry.name>
Sun, 30 Aug 2020 16:57:19 +0000 (12:57 -0400)
committerMarge Bot <marge-bot@gnome.org>
Wed, 24 Feb 2021 15:31:03 +0000 (15:31 +0000)
Apps that only inhibit other kinds of activity (like idle or suspend)
don't need to be shown to user when they are logging out.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3119

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1424>

data/dbus-interfaces/org.gnome.SessionManager.Inhibitor.xml
js/misc/gnomeSession.js
js/ui/endSessionDialog.js

index c745f81916771299f1b6e91f06b6e6eccffa9aee..aa6a23b8560bb44a8f347c9dbe4bfeecc820196a 100644 (file)
@@ -3,6 +3,9 @@
     <method name="GetAppId">
       <arg type="s" direction="out"/>
     </method>
+    <method name="GetFlags">
+      <arg type="u" direction="out"/>
+    </method>
     <method name="GetReason">
       <arg type="s" direction="out"/>
     </method>
index 2df9c844be1d110e806192e7fa3f54a5d22021e7..487644fe9b4ba34fdc002f348b4b1f8246a5b105 100644 (file)
@@ -1,5 +1,5 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
-/* exported PresenceStatus, Presence, Inhibitor, SessionManager */
+/* exported PresenceStatus, Presence, Inhibitor, SessionManager, InhibitFlags */
 
 const Gio = imports.gi.Gio;
 
@@ -35,3 +35,11 @@ var SessionManagerProxy = Gio.DBusProxy.makeProxyWrapper(SessionManagerIface);
 function SessionManager(initCallback, cancellable) {
     return new SessionManagerProxy(Gio.DBus.session, 'org.gnome.SessionManager', '/org/gnome/SessionManager', initCallback, cancellable);
 }
+
+var InhibitFlags = {
+    LOGOUT: 1 << 0,
+    SWITCH: 1 << 1,
+    SUSPEND: 1 << 2,
+    IDLE: 1 << 3,
+    AUTOMOUNT: 1 << 4,
+};
index 053ae8cce0e7f0a130d6888d54417707f41a0040..1fdbd11b93430f1ba09a8d50f0f573776b3d43c6 100644 (file)
@@ -626,8 +626,9 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
         }
 
         let app = findAppFromInhibitor(inhibitor);
+        const [flags] = app ? inhibitor.GetFlagsSync() : [0];
 
-        if (app) {
+        if (app && flags & GnomeSession.InhibitFlags.LOGOUT) {
             let [description] = inhibitor.GetReasonSync();
             let listItem = new Dialog.ListSectionItem({
                 icon_actor: app.create_icon_texture(_ITEM_ICON_SIZE),
@@ -636,7 +637,8 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
             });
             this._applicationSection.list.add_child(listItem);
         } else {
-            // inhibiting app is a service, not an application
+            // inhibiting app is a service (not an application) or is not
+            // inhibiting logout/shutdown
             this._applications.splice(this._applications.indexOf(inhibitor), 1);
         }